Java中的深拷贝与浅拷贝

您所在的位置:网站首页 java 深拷贝和浅拷贝 Java中的深拷贝与浅拷贝

Java中的深拷贝与浅拷贝

#Java中的深拷贝与浅拷贝| 来源: 网络整理| 查看: 265

本文由我司收集整编,推荐下载,如有疑问,请与我司联系

 

Java 

中的深拷贝与浅拷贝

 

2017/05/01 0 

Java 

中有两种拷贝方式一种是浅拷贝,一种是深拷贝。

 

 

两者的区别也很好阐述:浅拷贝它只是简单拷贝对象成员的引用,而深拷贝则会

 

重新生成一个对象副本。当然

 

String 

这些对象比较特殊。

 

 

举个实例:(注意看注释)

 

 

package 

clone;public 

class 

Teacher 

implements 

Cloneable 

{public 

String 

name;public 

int 

age;public 

Teacher(String 

name, 

int 

age) 

{super();this.name 

name;this.age 

age;}@Overridepublic 

Object 

clone() 

{Object 

obj=null;try 

{obj=super.clone();} 

catch 

(CloneNotSupportedException 

e) 

{// 

TODO 

Auto-generated 

catch 

blocke.printStackTrace();}return 

obj;}@Overridepublic 

String 

toString() 

{return 

Teacher 

[name= 

name 

age= 

age 

}}package 

clone;public 

class 

Student 

implements 

Cloneable 

{public 

Teacher 

teacher;public 

String 

name;public 

int 

age;public 

Student(Teacher teacher, String name, int age) {super();this.teacher = teacher;this.name 

name;this.age 

age;}//

浅拷贝

@Overridepublic 

Object 

clone() 

{Object 

obj=null;try 

{obj=super.clone();} 

catch 

(CloneNotSupportedException 

e) 

{// 

TODO 

Auto-generated 

catch 

blocke.printStackTrace();}return 

obj;}//

深拷贝

 

public 

Student 

clone(boolean 

flag) 

{Student 

student=null;try 

{student=(Student) 

super.clone();} 

catch 

(CloneNotSupportedException 

e) 

{// 

TODO 

Auto-generated 

catch 

blocke.printStackTrace();}student.teacher=(Teacher) 

student.teacher.clone();return 

student;}@Overridepublic String toString() {return Student [teacher= + teacher + , name= 

name 

age= 

age 

}}package 

clone;public 

class 

Client 

{public 

static 

void 

main(String[] 

args) 

{// 

TODO 

Auto-generated 

method 

stubTeacher 

teacher;Student 

student;Student 

clone_student;teacher=new 

Teacher( 

程老师

 

20);student=new 

Student(teacher, 

小猿

 

12);//

浅拷贝

 

clone_student=(Student) 

student.clone();System.out.println(teacher);clone_student.age=18;clone_student.name= 

大猿

 

//

改变

 

int 

 

String 

不会影响原本的类

 

clone_student.teacher.age=40; 

//

改变对象



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3